define(["jquery","comm/form/form.config"],function($,$config){
	var servers = {};

	/**
	 * 题目的提醒和校验处理方法
	 * 		list 类型(typeof)为数组
	 * 		判断条件仅仅是为了过滤掉之前配置的不带type的提醒（ps：一个个问卷改太多了，所以在这里统一处理）
	 */
	var handleData = function(list){
		if( typeof list == "string"){
			return list;
		}else if( typeof list == "object" && $.isArray(list) ){
			return list[0].type ? JSON.stringify(list) : null;
		}
	}

	/**
	 * 格式化数据
	 */
	var formatData = function(list,status,setStatus){
		var arr = [];
		for(var i = 0; i < list.length; i++){
			arr[i] = list[i];
			// 各个题型相同之处，统一处理(question_address题型单独在里面处理了)
			if(arr[i].deCode) arr[i].name = arr[i].deCode.replace(/\./g, "_"); // “.”不能作为name的名称
			if( !arr[i].status ) arr[i].status = status;
			// 若设置了setStatus，给这个题目特定的status
			if( setStatus ){
				for (var j = 0; j < setStatus.length; j++) {
					if( list[i].deCode == setStatus[j].deCode ) list[i].status = setStatus[j].status;
				}
			}
			if( !arr[i].length && arr[i].length != 0 ) arr[i].length = 4;
			if( !arr[i].labelLength && arr[i].labelLength != 0 ) arr[i].labelLength = 6;  // 配置报文时，若没有配labelLength，默认为6
			if( !arr[i].align ) arr[i].align = "right";  // 配置报文时，若没有配align，默认为right
			if( arr[i].attention ) arr[i].attention = handleData(arr[i].attention);
			if( arr[i].validate ) arr[i].validate = handleData(arr[i].validate);
			// 
			var questTypeArr = $config.getAllQuestType();
			for (var j = 0; j < questTypeArr.length; j++) {
				if( arr[i].type == "qusetion_group" ) arr[i].type = "question_group"; //兼容之前手误写错的 
				if( arr[i].type == questTypeArr[j] ){
					var $quest = $config.getQuest(questTypeArr[j]);
					if ( $quest.formatData && typeof $quest.formatData == "function" ) { 
						arr[i] = $quest.formatData(arr[i]); // 各个题型特殊之处，独立处理
					}
					break;
				}
			}
            if( arr[i].children ){
            	if(arr[i].relationId){
                    for (var j = 0; j < arr[i].children.length; j++) {
                        var data = {"relationId":arr[i].relationId};
                        $.extend(data,arr[i].children[j]);
                        $.extend(arr[i].children[j],data);
                    }
                }
            	arr[i].children = formatData(arr[i].children,status,setStatus);
            }
		}
		return arr;
	}

	/**
	 * 处理问卷数据
	 */
	servers.handleQuestionData = function(options){
		var defaults = {
			status:"default",
			showIcon: false
		};
		var opts = $.extend({},defaults,options);
		if(opts.questions && jQuery.isArray(opts.questions) && opts.questions.length){	// 配置了问卷的情况
			if( opts.questions[0].templData ){
				for(var i = 0; i < opts.questions.length; i++){
					opts.questions[i].templData = formatData( opts.questions[i].templData,opts.status,opts.setStatus );
				}
			}else{
				for(var i = 0; i < opts.questions.length; i++){
					for(var j = 0; j < opts.questions[i].contList.length; j++){
						opts.questions[i].contList[j].templData = formatData( opts.questions[i].contList[j].templData,opts.status,opts.setStatus );
					}
				}
			}
		}
		return opts;
	}

	/**
	 * 循环获取问卷里配置的默认val的问题
	 */
	var getQuests = function(list,arr){
		for (var i = 0; i < list.length; i++) {
			if( list[i].children ){
				getQuests( list[i].children,arr );
			}
			if( list[i].deCode && (list[i].val || list[i].val == "" ) ){
				arr.push(list[i]);
			}
		}
	}

	/**
	 * 获取拥有默认val的题目的集合
	 */
	servers.getQuestsHasDefaultVal = function(questions){
		var arr = [];
		if(questions && jQuery.isArray(questions) && questions.length > 0 ){
			if( questions[0].templData ){
				for(var i = 0; i < questions.length; i++){
					getQuests(questions[i].templData,arr);
				}
			}else{
				for(var i = 0; i < questions.length; i++){
					for(var j = 0; j < questions[i].contList.length; j++){
						getQuests(questions[i].contList[j].templData,arr);
					}
				}
			}
		}
		return arr;
	}

	return servers;
});